﻿using System;

namespace LM.Tela.Desktop.Formularios
{
    using LM.InterfacesFabricas.DTOs;
    using LM.InterfacesFabricas.Fabricas;
    using LM.InterfacesFabricas.Interfaces.Servicos;
    using System.Collections.Generic;
    using System.Globalization;

    public partial class frmVaga
    {
        public frmVaga()
        {
            InitializeComponent();
        }

        private void btnNovo_Click(object sender, EventArgs e)
        {
            PrepareTelaParaNovoRegistro();
        }

        private void PrepareTelaParaNovoRegistro()
        {
            LimpeCamposEdicao();
            CarregueItensJaCadastrados();
            txtCodigo.Enabled = true;
            txtCodigo.Focus();
        }

        private void LimpeCamposEdicao()
        {
            txtCodigo.Text = string.Empty;
            txtNumero.Text = string.Empty;
            txtTipo.Text = string.Empty;
        }

        private void CarregueItensJaCadastrados()
        {
            var servicoDeVaga = FabricaGenerica.Crie<IServicoDeVaga>();
            var vagas = servicoDeVaga.ConsulteTodos();

            gridVaga.DataSource = vagas;
        }

        private void btnSalvar_Click(object sender, EventArgs e)
        {
            int codigo;
            int.TryParse(txtCodigo.Text, out codigo);
            var vaga = new DtoVaga { Codigo = codigo, Numero = Convert.ToInt32(txtNumero.Text), Tipo = txtTipo.Text };

            var servicoDeVaga = FabricaGenerica.Crie<IServicoDeVaga>();
            if (!EmEdicao())
            {
                servicoDeVaga.Cadastre(vaga);
            }
            else
            {
                servicoDeVaga.Atualize(vaga);
            }

            PrepareTelaParaNovoRegistro();
        }

        private bool EmEdicao()
        {
            return !string.IsNullOrWhiteSpace(txtCodigo.Text) && txtCodigo.Enabled == false;
        }

        private void btnExcluir_Click(object sender, EventArgs e)
        {
            if (!EmEdicao())
            {
                this.ExibaInconsistencia("Vaga não selecionada para edição.");
            }
            else
            {
                var servicoDeVaga = FabricaGenerica.Crie<IServicoDeVaga>();
                servicoDeVaga.Exclua(int.Parse(txtCodigo.Text));

                PrepareTelaParaNovoRegistro();
            }
        }

        private void gridVaga_CellDoubleClick(object sender, System.Windows.Forms.DataGridViewCellEventArgs e)
        {
            if (e.RowIndex >= 0)
            {
                var vaga = ((IList<DtoVaga>)gridVaga.DataSource)[e.RowIndex];

                txtCodigo.Text = vaga.Codigo.ToString(CultureInfo.InvariantCulture);
                txtCodigo.Enabled = false;
                txtNumero.Text = Convert.ToString(vaga.Numero);
                txtTipo.Text = vaga.Tipo;
            }
        }

        private void frmVaga_Load(object sender, EventArgs e)
        {
            CarregueItensJaCadastrados();
        }
    }
}
